home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga News 96
/
Amiga News 96.iso
/
dpat
/
dpat129
/
amighpv2a
/
docs
/
amighp2.0a_fr.doc
< prev
next >
Wrap
Text File
|
1977-12-31
|
11KB
|
484 lines
********************
* AMIGHP V2.0 *
* © LEGER Frederic *
********************
* *
* MANUEL *
* *
********************
AVERTISSEMENT : DE NOMBREUX CHANGEMENTS ONT ETES FAIT !
Prennez connaissances des nouvelles fonctions
SL,SR,PUSHOBJ,NOT,AND,OR.
D'autres ont par ailleurs changées de nom:
D1SAUV -> D1RCL MAKE -> DO
DO -> LOOP WEND -> ENDWHILE
LOOP -> ENDLOOP FINDEF -> ENDDEF
PUSH_STR -> STRCALC PUSH_OBJ -> PUSHOBJ
De plus, j'ai implementé un optimiseur de code,
il semble stable, MAIS il se peut que des bogues
n'aient pas étés découverts dans la gestion
des fichiers temporaires. A ce titre, je vous
rappelle que si vous utilisez AMIGHPv2a, c'est
a vos risques et perils.
Le code non optimisé se trouve dans "a.out".
Le code généré a été modifié en consequence,
pour supporter l'optimiseur. Beaucoup de bogues
ont ainsi été découverts.
Je pense qu'il vaut mieux utiliser la version 2.0a
car pas mal de choses ont changées.
(La pluspart des programmes pour la version 1.0f
ne seront pas compilé par la 2.0a !)
1) La compilation
-----------------
Lancez un shell et tapez :
AMIGHP nom_fichier_source nom_fichier_destination
C'est aussi simple que ca !
2) La pile compilateur
----------------------
Le compilateur dispose d'une pile de 2 niveaux se trouvant
dans les champs A des registres A et C.
Cette pile est le lieu de stockage temporaire des resultats,
pour sauvegarder ces resultats il faut effectuer un stockage.
ex:
12 I ADD -> C.A , C.A plein
15 I ADD -> A.A , A.A plein
ADD -> C.A = C.A + A.A , A.A vide
I STO -> I = C.A , C.A vide
Comme vous pouvez le voir, cela permet une optimisation du code,
puisque l'adition peut etre effectuee entre les deux registres
directement.
De meme, on peut ecrire : 0 I STO I 15 ADD 12 MUL I STO
I vaudra alors 180.
ATTENTION : La pile ne contient que 2 niveaux, pas 3 ni plus !
Le compilateur se chargera de le faire remarquer.
3) Les variables
----------------
Les variables ont une adresse fixe en memoire, ce qui est un
gage de rapidite d'acces.
Par defaut c'est $800F5 ce qui permet d'avoir 106 variables integer.
C'est la zone de transfert de la HP48.
De plus ce procede ne prend aucune RAM utilisateur.
Vous pouvez choisir une autre zone memoire en faisant un poke dans
AMIGHP en recherchant $0800F5 et en le remplacant par ce que bon
vous semble !!!
4) Les instructions supportees
------------------------------
DEF ...... ENDDEF
-----------------
Delimiteurs DU bloc de definition des variables.
En effet, les variables ne sont declarees qu'au debut du programme.
Ces deux instructions sont OBLIGATOIRES !!!
INTEGER
-------
Seul type de variable disponible a l'heure actuelle.
Une variable INTEGER apartient a l'interval [0,1048575].
Ce type correspond aux 5 quartets du champ A.
ex:
DEF
I J K INTEGER
FINDEF
CHAR et POINTER
---------------
Type de variable, créé pour une meilleure lisibilité,
ils sont traité comme des INTEGERS
INC
---
Incremente une variable
ex:
I INC
DEC
---
Decremente une variable
ex:
I DEC
STO
---
Stocke une valeur , un resultat ou le contenu d'une
variable dans une variable.
ex:
120 I STO ou J I STO (stocke dans I)
EXIT
----
Sort du programme.
ex:
.... I PUSH EXIT
PUSH
----
Pousse une variable dans la pile HP48.
ex:
I PUSH
ADD
---
Additionne deux operandes , resultat dans C.A ou A.A
ex:
I J ADD K STO
I 10 ADD K STO
SUB
---
Soustrait deux operandes , resultat dans C.A ou A.A
ex:
I J SUB K STO
I 10 SUB K STO
MUL
---
Multiplie deux operandes , resultat dans C.A ou A.A
ex:
I J MUL K STO
I 10 MUL K STO
INTOFF
------
Enleve les interruptions.
INTON
-----
Remet les interruptions.
POP
---
Lit un system binary dans la pile et le place dans une variable.
Cette fonction le DROP de la pile.
ex: --------------
I POP |4) |
=> I vaut 154A4h |3) |
|2) |
|1) <154A4h> |
|--------------|
| | | | | |
--------------
LOOP
----
Ouverture d'une boucle infinie LOOP...ENDLOOP
ENDLOOP
-------
Fermeture d'une boucle infinie LOOP...ENDLOOP
WHILE
-----
Boucle WHILE condition DO instructions ENDWHILE
ex:
WHILE
I J <
DO
I DEC
ENDWHILE
==,!=,<,>,<=,>=
---------------
Compare deux operandes
I J <= se lit I <= J
I 10 <= se lit I <= 10
IF
--
Boucle IF
ex:
IF IF
I 50 > I 50 >
THEN THEN
I DEC I DEC
ELSE ENDIF
I INC
ENDIF
Le ENDIF est OBLIGATOIRE , pas le IF.
INCLUDE
-------
Inclut du code assembleur "inline"
ex:
ROUT1.ASM INCLUDE
GETI
----
Recupere 5 quartets pointés par D1.(un INTEGER!)
(Recupere l'adresse de l'objet au niveau 1 de la pile HP48
et la stocke dans une variable par exemple.)
ex:
ADR.OBJ GETI
PUTI
----
Ecrit un INTEGER sur le flot pointé par D1.
D1STO
-----
Stocke la valeur d'une variable (pointeur) dans D1.
On peut aussi stocker un nombre directement,
c'est plus propre! (Lave avec MirLaine!)
ex:
526032 I STO I D1STO -> BEURK !!!
526032 D1STO -> D1=(5) $806D0
D1RCL
-----
Sauvegarde D1 dans une variable.
ex:
15400 I STO I D1STO J PUTC I D1RCL
GETC
----
Recupere un caractere pointe par D1 dans une variable
et fait D1=D1+2.
ex:
15400 I STO I D1STO J GETC
PUTC
----
Ecrit un caractere sur l'octet pointe par D1 et fait D1=D1+2.
ex:
15400 I STO I D1STO J PUTC
GETCAR
------
Recupere un caractere pointe par D1 dans une variable.
ex:
15400 I STO I D1STO J GETCAR
PUTCAR
------
Ecrit un caractere sur l'octet pointe par D1.
ex:
15400 I STO I D1STO J PUTCAR
DROP
----
Drop un niveau de la pile HP48.
RESSTR
------
Reserve une chaine en memoire et renvoie l'adresse du contenu.
IMPORTANT: La pile compilateur est sauvegardee, et restauree apres.
ex:
1500 TAILLE STO
ADR.DEB TAILLE RESSTR
RAPPEL: L'adresse du contenu est egale a l'adresse de debut
d'objet (ADR.DEB) + 10
STRCALC
-------
recalcule une chaine.
IMPORTANT: La pile compilateur est sauvegardee, et restauree apres.
ex:
ADR.FIN ADR.DEB STRCALC
PUSHOBJ
--------
Pousse un objet dans la pile HP48.
ex:
ADR.DEB PUSHOBJ
DISPON
------
Allume l'affichage.
DISPOFF
-------
Eteint l'affichage.
AON
---
Tous les indicateurs ON.
AOFF
----
Tous les indicateurs OFF.
DIV
---
Divise
ex:
I J DIV <--> I/J
I 3 DIV <--> I/3
I J ADD
3 DIV <--> (I+J)/3
BEEP
----
Fait beeper le buzzer!
IMPORTANT: La pile compilateur est sauvegardee, et restauree apres.
ex:
DUREE FREQ BEEP
DUREE est en millisecondes.
SL
--
Multiplie par 2.
ex:
I SL
SR
--
Divise par 2
ex:
J SR
INCD1
-----
Incremente D1.
ex:
12 INCD1 -> D1=D1+ 12
NOT
---
non logique.
OR
--
ou logique. (0 est false à priori)
AND
---
et logique. (0 est false à priori)
ERROR
-----
fait un message d'erreur et sort.
ex:
5 ERROR -> "Error: Memory Clear"
GOSUB
-----
Saute a une procedure.
ex:
BOB GOSUB
RETURN
------
Sort de la procedure.
ex:
IF I 560 == THEN RETURN ENDIF
5) Les PROCEDURES
-----------------
- Les procedures sont reduites au strict-minimum pour l'instant.
Leurs variables sont locales (pseudo-locales serait plus precis!)
On doit definir une procedure ainsi :
<<
DEF Un tel programme ne fait rien, MAIS...
ENDDEF il a le merite d'exister. ET C'EST TOUT !
LOOP
BOB GOSUB -> GOSUBL BOB
EXIT D0=D0+ 5
ENDLOOP A=DAT0 A ...
BOB PROC *
DEF | Si cette partie est negligee, on peut
ENDDEF | creer le label BOB tout seul dans le code asm.
| ou bien ne pas le mettre -> Erreur
ENDPROC *
>>
6) ANNEXES
----------
- Je me degage de toute responsabilite concernant les eventuelles catastrophes
que pourrait entrainer l'usage de mon compilateur.
Vous l'utilisez à vos risques et perils. Vous etes avertis !
- AMIGHP n'est pas parfait, loin de la! Certaines de ses fonctions
n'ont pas encore ete testees totalement. Alors si vous trouviez
des BUGs, soyez sympas dites le moi. Et dans la mesure du possible,
j'y remedierai.
- Le code doit etre retravaille un minimum pour etre compile
par les Assembleurs tel HPAsmv3.10e Par Christophe Vallee.
Entete : include entries.i
con(5) DOCODE
Debut con(5) Fin-Debut
......................
......................
Fin : Fin
- Le logiciel est libre de droit.
Si vous souhaitez en avoir le source, laissez moi un message
au 3614 AMIGATEL BAL NANARD125.
- Futures ameliorations :
-----------------------
+ De nouvelles adresses de base pour les variables.
+ Un type LONG (64bits) pour les variables.
+ Une nouvelle fonction PUSHOBJ.
+ Plein d'autres fonctions.
+ Une interface graphique avec Requesters.
+ Des versions MAC et PC.
7) Le ABOUT
-----------
Nom: LEGER
Prenom: Frederic
Age : 19
Etudes: DEUG TI 2éme année
Lieu : Grenoble
Mon AMIGA : un A500+,A530,4Mb 60ns,2Mb CHIP,
1 Giga AMI ,1 Giga PC et 58Mb MAC.
J'en profite pour saluer mes potes Vincent ROUKINE (ROOK)
et Vincent VERILHAC (VV Fly is here?) qui m'ont file quelques
conseils utiles.
Je remercie aussi les membres du journal AmigaNEWS, sans qui mon
compilo ne serait pas sur AMINET.
___
\\\\
\\\\ ONLY AMIGA !!!
\\\\ ___
\\\\ ////
\\\\ ////
\\\\////
\\\/// LEDJ
\\//
\/
*** DISCLAIMER ***
NO GUARANTEE IS GIVEN NOR IMPLIED THAT THIS PROGRAM IS FIT FOR ANY
USE. THIS PROGRAM AND THE INFORMATION WITHIN THIS TEXT IS PROVIDED ON
"AS IS" BASIS. THE ENTIRE RISK AS TO ITS QUALITY AND PERFORMANCE IS
WITH THE USER. SHOULD THE PROGRAM PROVE DEFECTIVE, THE USER (AND NOT
THE AUTHOR) ASSUMES THE ENTIRE COST OF ALL NECCESSARY DAMAGES. IN NO
EVENT WILL THE AUTHOR BE LIABLE FOR DIRECT, INDIRECT, INCIDENTAL OR
CONSEQUENTIAL DAMAGES RESULTING FROM ANY DEFECT IN THE PROGRAM. THE
AUTHOR RESERVES THE RIGHT TO MAKE CHANGES TO THE SOFTWARE OR
DOCUMENTATION WITHOUT NOTICE.